﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace SpaceGame
{
    class Jogo
    {
        Nave nave;
        //Torre torre2;

        bool tocandoMusica;
        Song musica;
        SoundEffect efeitoSonoro;
        GameWindow Window;
        Texture2D imgInimigo, imgTiro;
        static public List<Inimigo> inimigos;

        public Jogo(ContentManager Content, GameWindow Window)
        {
            this.Window = Window;
            //efeitoSonoro = Content.Load<SoundEffect>("WindowsError");

            nave = new Nave(Content.Load<Texture2D>("nave"), Window, Content.Load<Texture2D>("tiro"));

            imgInimigo = Content.Load<Texture2D>("inimigos");
            imgTiro = Content.Load<Texture2D>("tiro");

            inimigos = new List<Inimigo>();
            //torre2 = new Torre(Content.Load<Texture2D>("circulo"), Window, efeitoSonoro);

            //torre2.Posicao = new Vector2(150, 150);
            //torre2.jogador = 2;

            //musica = Content.Load<Song>("Kalimba");

            //MediaPlayer.Play(musica);
            //MediaPlayer.Pause();
        }

        public void Update(GameTime gameTime, KeyboardState teclado_atual, KeyboardState teclado_anterior, MouseState mouse_atual, MouseState mouse_anterior)
        {
            nave.Update(gameTime, teclado_atual, teclado_anterior, mouse_atual, mouse_anterior);

            inimigos.ForEach(delegate(Inimigo inimigo)
            {
                inimigo.Update(gameTime);
                if (!inimigo.existe)
                {
                    inimigos.Remove(inimigo);
                }
            });

            if (inimigos.Count < 5)
                inimigos.Add(new Inimigo(imgInimigo, Window, imgTiro));

            //torre2.Update(gameTime, teclado_atual, teclado_anterior, mouse_atual, mouse_anterior);

            /*if (torre2.Bateu(torre))
            {
                torre2.visivel = false;
            }*/

            //if(joystick_atual.Buttons.A), B, X, Y, Left/Right Stick, Left/Right Shoulder, Start, 
            //if(joystick_atual.DPad.Down, Right, Left, Up
            /*if (joystick_atual.ThumbSticks.Right.X == 1)
            {
                torre.Posicao = Vector2.Zero;
            }*/

            if (teclado_atual.IsKeyDown(Keys.P)
    && teclado_anterior.IsKeyUp(Keys.P))
            {
                if (!tocandoMusica)
                {
                    MediaPlayer.Resume();
                    tocandoMusica = true;
                }
                else
                {
                    MediaPlayer.Pause();
                    tocandoMusica = false;
                }

            }

            if (teclado_atual.IsKeyDown(Keys.S))
            {
                MediaPlayer.Stop();
                tocandoMusica = false;
            }
            if (tocandoMusica)
            {
                if ((teclado_atual.IsKeyDown(Keys.PageUp)) && (teclado_anterior.IsKeyUp(Keys.PageUp)))
                {
                    MediaPlayer.Volume += 0.1f;
                }
                if ((teclado_atual.IsKeyDown(Keys.PageDown)) && (teclado_anterior.IsKeyUp(Keys.PageDown)))
                {
                    MediaPlayer.Volume -= 0.1f;
                }
                if ((teclado_atual.IsKeyDown(Keys.M)) && (teclado_anterior.IsKeyUp(Keys.M)))
                {
                    MediaPlayer.IsMuted = !MediaPlayer.IsMuted;
                }
            }
        }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            nave.Draw(gameTime, spriteBatch);
            inimigos.ForEach(delegate(Inimigo inimigo)
            {
                inimigo.Draw(gameTime, spriteBatch);
            });
            //torre2.Draw(gameTime, spriteBatch, torre.andando);
        }
    }
}
